/**
  ******************************************************************************
  * @文件名           : bsp_adc.c
  * @作者             : citunhk
  * @功能介绍         : ADC采集与DMA通道初始化
  *	@日期             : 2022.10.31
  ******************************************************************************
  * @注意
  *
  * 本文件中不应调用上层文件
  *
  ******************************************************************************
  *更改记录
  *日期 修改人 修改内容
  *
  *
  *
  ******************************************************************************
  */
/* Private includes ----------------------------------------------------------*/
#include "bsp_adc.h"
/* Private typedef -----------------------------------------------------------*/

/* Private define ------------------------------------------------------------*/

/* Private macro -------------------------------------------------------------*/

/* Private variables ---------------------------------------------------------*/

/* Private function prototypes -----------------------------------------------*/

uint16_t gAD_DMAbuffer[SIZE_OF_ALL_DMA] = {0};  //AD值DMA数组

/**
* @函数名	BSP_ADC_DMA_Init
* @功能	    ADC与DMA初始化
* @入口参数	无
* @返回值	无
*/
void BSP_ADC_DMA_Init(void)
{
	LL_ADC_StartCalibration(ADC1);
	while( LL_ADC_IsCalibrationOnGoing(ADC1));
	LL_ADC_ClearFlag_ADRDY(ADC1);
	while(LL_ADC_IsActiveFlag_ADRDY(ADC1));

    //LL_mDelay(10); //延时10ms，避免DMA读取数据通道不对
	//	DMA使能 这个是关键，不能放到adc校准前面否则读出来的数据会不对
	LL_DMA_SetDataLength(DMA1, LL_DMA_CHANNEL_1, SIZE_OF_ALL_DMA);
	LL_DMA_SetPeriphAddress(DMA1, LL_DMA_CHANNEL_1, LL_ADC_DMA_GetRegAddr(ADC1, LL_ADC_DMA_REG_REGULAR_DATA));
	LL_DMA_SetMemoryAddress(DMA1, LL_DMA_CHANNEL_1, (uint32_t)&gAD_DMAbuffer);
	LL_DMA_EnableChannel(DMA1, LL_DMA_CHANNEL_1);  //在启动ADC之前使能DMA，避免使能ADC以及校准ADC时，DMA中存数，导致后面数据错乱
	LL_ADC_REG_SetDMATransfer(ADC1, LL_ADC_REG_DMA_TRANSFER_UNLIMITED);
	LL_ADC_Enable(ADC1);//	Run the ADC calibration  使能ADC
	LL_ADC_REG_StartConversion(ADC1);
}
/**************** (C) COPYRIGHT EdwardYang *************END OF FILE****/
